home *** CD-ROM | disk | FTP | other *** search
/ IRIS Performer 2.2 Friends Demo / SGI IRIS Performer 2.2 Friends Demo.iso / friends / devices / BGSystems / bg / convert.c < prev    next >
C/C++ Source or Header  |  1997-10-31  |  1KB  |  66 lines

  1. /*
  2.  * Copyright 1992-4   BG Systems, Inc.
  3.  * convert.c
  4.  *
  5.  * Routine to convert input string 
  6.  *
  7.  * Author         Date       Comments
  8.  * John Green     21-Oct-94  Major revision for v 3.0 EPROM
  9.  * John Green     01-Feb-95  Final rev 3.0 cleaning
  10.  * John Green     15-Mar-95  Fixed scaling bug
  11.  */
  12.  
  13. static char SccsId[] = "@(#)convert.c    1.3 16 Mar 1995";
  14.  
  15. #include <stdio.h>
  16.  
  17. #include "lv3.h"
  18.  
  19. int convert_serial(bglv *bgp, char *str)
  20. {
  21.    int i, digp, j;
  22.    int k = 0;
  23.    float tmp[8];
  24.  
  25.    digp = 0;
  26. /*
  27.  *  Load the digital input values into dioval
  28.  */
  29.    k = 1 + bgp->n_dig_in/4;
  30.    if ( k > 1)
  31.    {
  32.       i = 1;
  33.       for ( j = 2; j >= 0; j-- )
  34.       {
  35.          if ( bgp->dig_in & 0x10<<j )
  36.          {
  37.             digp = 0x0f & (str[i++]-0x21);
  38.             digp = (digp << 4) | 0x0f & (str[i++]-0x21);
  39.             bgp->din[j] = digp;
  40.          }
  41.       }
  42.    }
  43.  
  44. /*
  45.  *  Load the 8 analog values into inbuf
  46.  */
  47.    for (i = k; i < bgp->str_len - 2; i += 2)
  48.    {
  49.       digp = ((0x3f & (str[i]-0x21)) << 6) |
  50.                     (0x3f & (str[i+1]-0x21));
  51.       tmp[(i-k)/2] = -1.0 + (2.0 * digp/4095);
  52.    }
  53.    for ( i = 0, k = 0; k < 8; k++ )
  54.    {
  55.       if ( bgp->analog_in >> k &0x1 )
  56.       {
  57.          bgp->ain[k] = tmp[i];
  58.      i++;
  59.       }
  60.    }
  61.  
  62.    digp =  ((0x0f & (str[22]-0x21)) <<  4) |
  63.            (0x0f & (str[23]-0x21));
  64.    return (0);
  65. }
  66.